#include <iostream>
#include <sys/socket.h>
#include "sock.h"
#include "sockdist.h"

using namespace std;

int taille(char *c){
	int flag=0,i=0;

	while(c[i]!='\0'){
		flag++;
		i++;
	}
	return flag;
}

int main(int argc, char** argv){
	//si le nom de la machine n'est pas renseignee
	if(argc<2){
		fprintf(stderr,"Erreur lors de l'execution du programme \"%s\" : nom de la machine non renseignee en parametre\n", argv[0]);
		return EXIT_FAILURE;
	}
	int descbreLoc, getsock;
	int envoi,retour;
	sockaddr_in sock;
	socklen_t namelen=sizeof(struct sockaddr_in);
	char msg[300]="Aloha !";

	Sock breLoc(SOCK_DGRAM, (short)2000,0);

	if (breLoc.good()){
		descbreLoc=breLoc.getsDesc();
	}

	else {
		cout<<"Problème BR locale "<<endl;
		return EXIT_FAILURE;
	}
	
	/*
	***Affiche num port
	*/
	getsock=getsockname(descbreLoc, (struct sockaddr *)&sock, &namelen);
	
	if (getsock==0){
		cout<<"port : "<<ntohs(sock.sin_port)<<endl;	
	}
	else {
		cout<<"Erreur getsockname"<<endl;
	}

	/*
	***Perroquet
	*/
	//Envoie message
	SockDist dist(argv[1], 31469);
	sockaddr_in *adrsaB=dist.getAdrDist();
	envoi=sendto(descbreLoc, msg, taille(msg), 0, (sockaddr *) adrsaB,dist.getsLen());

	//reception
	char tamponR[300];
	int i=0, j=0;
	retour=recvfrom(descbreLoc, tamponR, 300,0,NULL,NULL);

	//tant qu'on n'a pas tape "exit" ou "quit", on continue de parler
	while((msg[3]!='t' || msg[2]!='i' || msg[1]!='x' || msg[0]!='e')&&(msg[0]!='q' || msg[1]!='u' || msg[2]!='i' || msg[3]!='t')){
		i=j=0;
		envoi=sendto(descbreLoc, msg, taille(msg), 0, (sockaddr *) adrsaB,dist.getsLen());
		if (envoi <0){
			fprintf(stderr,"Erreur lors de l'envoi\n");
			return EXIT_FAILURE;
		}

		retour=recvfrom(descbreLoc, tamponR, 300,0,NULL,NULL);
		if (retour <0){
			fprintf(stderr,"Erreur lors du retour\n");
			return EXIT_FAILURE;
		}

		tamponR[retour]='\0';
		for (j=retour+1; j<300; j++){
			tamponR[j]=' ';
		}
		while (tamponR[i]!='\0'){
			cout<<tamponR[i];
			i++;
		}
		cout<<endl;
		cin.getline(msg,300);
	}

	return 0;
}
